'''
算法设计思路：枚举法 穷举法
    将所有问题的解决办法一一列举出来，进行逐个判断，直到解决问题为止
'''
'''
水仙花数 每位数的立方和=数 123
'''
for i in range(100,1000):
    # 百
    a = i //100
    # 十
    b = i // 10 %10
    # 个
    c = i%10
    if a**3 +b**3 +c**3 == i:
        print(i)

'''
递归：在函数的内部，调用自己
代码的本质：执行重复代码，但是在方法中，一定要有一个出口。
          比while、for循环功能更强大，如果递归层数比较大，可能造成内存溢出
阶乘： 5！   5*4*3*2*1
定义一个函数：实现阶乘运算
    jiecheng(5) = 5*jiecheng(4)
    jiecheng(4) = 4*jiecheng(3)
    jiecheng(3) = 3*jiecheng(2)
    jiecheng(2) = 2*jiecheng(1)
    jiecheng(1) = 1  ----递归出口
    
    出：
    jiecheng(1) = 1
    jiecheng(2) = 2*1
    jiecheng(3) = 3*2*1
    jiecheng(4) = 4*3*2*1
    jiecheng(5) = 5*4*3*2*1
'''
# 5！
def jisuan(n):
    cheng = 1
    for i in range(1,n+1):
        cheng *= i
    print(cheng)

jisuan(5)

# 递归
def jiecheng(n):
    if n > 1:
        cheng = n * jiecheng(n-1)
    else:
        cheng = 1
    return cheng

def jiecheng1(n):
    if n > 1:
        return n * jiecheng(n - 1)
    return 1


print(jiecheng(5))
print(jiecheng1(5))